home *** CD-ROM | disk | FTP | other *** search
/ Chip 1996 April / CHIP 1996 aprilis (CD06).zip / CHIP_CD06.ISO / hypertxt.arj / 92 / SZIMU1.CD < prev    next >
Text File  |  1995-09-17  |  16KB  |  454 lines

  1.       @VSzimuláció számítógéppel@N
  2.  
  3.           ùjabb sorozatot indítunk, melynek témája a  számítógépes
  4.       szimuláció  ""SK",  azaz   csináld  magad  módon.   A  gépek
  5.       teljesítôképességének  rohamos  növekedtével  egyre   többek
  6.       számára elérhetô  ez az  izgalmas és  szórakoztató, játéknak
  7.       tûnô komoly szakterület. E számunkban meg kívánjuk gyôzni az
  8.       Olvasót     a    téma     fontosságáról,    és     mellesleg
  9.       megvalósíthatóságáról,  elérhetôségérôl.  A  késôbbiek során
  10.       alapvetô  módszerekkel,  ötletekkel  szeretnénk foglalkozni,
  11.       úgy, hogy  haszonnal olvashassa  a cikkeket  kezdô és haladó
  12.       egyaránt.
  13.           @K""Akár egy halom hasított fa,
  14.           @Khever egymáson a világ,
  15.           @Kszorítja, nyomja, összefogja
  16.           @Kegyik dolog a másikát
  17.           @Ks így mindenik determinált."
  18.           @KJózsef Attila: Eszmélet@N
  19.           Az ember kíváncsi, meg kívánja ismerni a körülötte  lévô
  20.       világot. A világ azonban  ellenáll ennek, mert bonyolult.  A
  21.       jelenségek  végtelen   gazdagsága  áll   szemben  az   ember
  22.       korlátozott  képességeivel.  De  az ember  sem  adja  fel: a
  23.       tudomány évezredek alatt  kialakította a maga  igen hatékony
  24.       megismerési módszerét:
  25.           1. Figyeld meg alaposan a valóságot! (Pontosabban azt a
  26.          jelenségkört, mely valamiért érdekel.)
  27.           2.  Emeld   ki  a   lényeges  vonásokat!   (Ez  talán  a
  28.       legnehezebb lépés.)
  29.           3. Készíts minél egyszerûbb modellt, amely értelmezi a
  30.          lényeges adatok változásait!
  31.           4. Ellenôrizd a modellt kísérletekkel!
  32.           5. Mûködtesd a modellt, vonj le újabb következtetéseket!
  33.           6. Ållapítsd meg a modell korlátait, érvényességi körét!
  34.           7. Lehet elölrôl kezdeni...
  35.           Ez  a   módszer  --   tudnillik  modellek   alkotása  és
  36.       alkalmazása  -- vezette  el az  emberiséget a  kôbaltától  a
  37.       Newton-törvényeken és a gôzgépen át a  relativitáselméletig,
  38.       a  maghasadásig,  az  ûrhajózásig  és  a  számítógépekig. És
  39.       pontosan  a  számítógépek  tesznek  lehetôvé  e  jól  bevált
  40.       folyamatban új megközelítést, új módszereket.
  41.  
  42.  
  43.       @VA matematikai háttér@N
  44.  
  45.           A természeti jelenségek eddigi modelljeinek  matematikai
  46.       alapja a differenciálegyenlet.  Ez egy olyan  egyenlettípus,
  47.       mely egy (vagy több) mennyiség és annak változási  sebessége
  48.       között ír le kapcsolato(ka)t. Itt -- némileg leegyszerûsítve
  49.       a kérdést -- három eset fordul(hat) elô.
  50.           @V1.@N Bizonyos egyszerû esetekben a differenciálegyenletnek
  51.       található  elemi matematikai  függvényekkel leírható  teljes
  52.       megoldása.  Például  a rugóra  függesztett  test mozgását  a
  53.       következô egyenlet írja le:
  54.               2    2
  55.              d y/dt = -k * y
  56.           ami  annyit tesz,  hogy a  test pillanatnyi  kitérésével
  57.       arányos  mértékben,  de azzal  ellentétes  irányban gyorsul.
  58.       Ennek  az úgynevezett  másodrendû differenciálegyenletnek  a
  59.       megoldása:
  60.              y = A*sin(2*π*f*t)
  61.           Ez  a  középiskolai  tanulmányokból  ismert  úgynevezett
  62.       harmonikus  rezgômozgás  egyenlete.   Ezt  tudván,  a   test
  63.       mozgásának    bármely    állapota    ismertnek   tekinthetô,
  64.       számítógépre elsô közelítésben nincs szükségünk.
  65.           @V2.@N Az esetek egy másik -- számszerûleg sokkal nagyobb --
  66.       részében ilyen  megoldás nincs  (nem ismert),  a felállított
  67.       differenciálegyenleteket    közelítô    módszerekkel    kell
  68.       megoldani.  Ilyen  problémákkal  találkozhatunk  például   a
  69.       biológiai rendszerek  vizsgálatánál. Egy  egyszerû példa  az
  70.       ismert ""nyúl--róka"  probléma, melynek  leírását az  alábbi
  71.       egyenletrendszer szolgáltatja:
  72.           d N/ d t = a*N - k*N*R
  73.           d R/ d t = -b*R + l*N*R,
  74.           ahol  N,  R  a nyulak,  illetve  rókák  aktuális (idôtôl
  75.       függô)  száma;  a,  b,  k,  l  az  együttélésüket   jellemzô
  76.       együtthatók.  Az  egyenletek  jelentése:  a  nyulak  a rókák
  77.       nélkül  korlátlanul  szaporodnának,  a  rókák  pedig  nyulak
  78.       (táplálék)   nélkül  kihalnának.   Ez  az   egyenletrendszer
  79.       numerikusan megoldható például az Euler módszerrel, mely egy
  80.       rekurzív  formulát  szolgáltat  N  és  R  értékére.  Magától
  81.       érthetôdô  módon,   itt  a   számítógépek  nagyon   jelentôs
  82.       szerephez    jutnak     (már    nemcsak     a    szemléletes
  83.       megjelenítésben), hiszen adott esetben nagytömegû  számítást
  84.       (esetleg  egyenletek  százainak  egyidejû  megoldását)  kell
  85.       elvégeznünk.
  86.           @V3.@N A jelenségek  legnagyobb osztályát azok  a folyamatok
  87.       alkotják,   melyekre   nem   létezik   differenciálegyenlet.
  88.       Gondoljunk  csak  olyan  ""egyszerû"  jelenségekre,  mint  a
  89.       jégvirág  növekedése   az  ablakon;   a  felfújódó   léggömb
  90.       ""belvilága"; a valóságos biológiai rendszerek; a társadalmi
  91.       változások; a globális problémák elemzése, elôrejelzése.
  92.           Ilyenkor  számos  különálló  egyed  mozgását, változását
  93.       kell nyomon követni, s  a rendszer globális viselkedését  az
  94.       összetevôk    átlagos    tulajdonságainak     megkeresésével
  95.       állapítjuk meg. Az  ilyen vizsgálat számítógéppel  végezhetô
  96.       el.  A  jelenségeket közvetlen  módon  szimuláljuk, azaz  az
  97.       egyedeket, a  közöttük ható  kapcsolatokat lépésrôl  lépésre
  98.       egy  számítógépes  --  konstruktív  --  kísérlet   keretében
  99.       vizsgáljuk. Ez az a lehetôség, amely a tudományos megismerés
  100.       hagyományos folyamatában új  elemként jelentkezik, hiszen  a
  101.       jelenségek  egy  hatalmas köre  válik  ezáltal elemezhetôvé,
  102.       megismerhetôvé. Egyben ez az a terület, mely a  számítógépes
  103.       szimulációnak az igazi terepe, ahol igazán érdemes a gépeket
  104.       használni.
  105.           Ne becsüljük  le azonban  az elsô  két pontban  említett
  106.       jelenségeknél  sem  a számítógépeket.  Több  okunk is  lehet
  107.       erre.  Az átlagos  matematikai képzettségû  ember számára  a
  108.       három  jelenségcsoport   nem  különül   el,  hiszen   sem  a
  109.       differenciálegyenletek,    sem    megoldásuk    módja    nem
  110.       középiskolai  tananyag,   így  egy   ""elemi"  probléma   is
  111.       megoldhatatlanná,   elemezhetetlenné   válik   a   közvetlen
  112.       szimuláció számítógépes megvalósítása nélkül.
  113.           Belátható idôn belül kevesen leszünk abban a helyzetben,
  114.       hogy  Niel  Amstrong módjára  szökdécselve  tanulmányozzuk a
  115.       ferde  hajítás  jelenségét   a  Holdon,  hogy   láncreakciót
  116.       elemezzünk  otthon,   hogy  a   Nap  belsejében   lejátszódó
  117.       folyamatokat az iskolai  fizika órán láthassuk...  Egyszóval
  118.       számítógéppel szimulálunk, mert a jelenség veszélyes, drága,
  119.       túl gyors, vagy éppenséggel  lassú, túl kisméretû, vagy  túl
  120.       nagyméretû.
  121.           A   természeti   törvények   a   valóságos   kísérletben
  122.       áthághatatlanok,     hibás     feltételek     katasztrófához
  123.       vezethetnek, de nem így a számítógép képernyôjén. Feltehetôk
  124.       és -- legalábbis részben  -- megválaszolhatók a ""mi  lenne,
  125.       ha ..." típusú kérdések, melyek már nem egyszer vitték elôre
  126.       nagy lépéssel a tudomány ügyét.
  127.  
  128.  
  129.       @VA szimuláció@N
  130.  
  131.           Nézzük  ezek  után,  hogyan  is  lehet  egy  szimulációs
  132.       programot felépíteni, megírni. Egy általános, keret  jellegû
  133.       algoritmus a következô  (erre, mint csontvázra  tesszük majd
  134.       rá mindig a ""húst", azaz a konkrét probléma algoritmusát):
  135.           @KSzimuláció:
  136.         Kezdeti értékek, paraméterek megadása;
  137.         Kezdôkép;
  138.         Idô=0;
  139.         Ciklus amíg Szükséges
  140.             Szimulációs lépés;
  141.             Eredménymegjelenítés;
  142.             Idô=Idô+1;
  143.         Ciklus vége;
  144.         Összegzés;
  145.           Program vége.@N
  146.           A fentiek jobb  megértése érdekében tekintsünk  most két
  147.       egyszerû problémát,  méghozzá egy  1. illetve  egy 3. típusú
  148.       jelenséget vizsgálva.
  149.  
  150.  
  151.       @VRadioaktivitás@N
  152.  
  153.           Az  elsô  jelenség  legyen  a  radioaktív  bomlás. Ennek
  154.       felírható a differenciálegyenlete:
  155.           dN/dt = -k*N,
  156.           ami  mindössze annyit  jelent, hogy  valamely idô  alatt
  157.       elbomló atommagok száma arányos a meglevô magok számával,  s
  158.       függ az atom úgynevezett bomlási állandójától (@Kk@N). Ennek  az
  159.       egyenletnek van zárt megoldása, de mi ennek ismerete nélkül,
  160.       közvetlen szimulációval kívánjuk leírni a jelenséget.  Ehhez
  161.       válasszuk az alábbi egyszerû modellt:
  162.           A  képernyôn  az  atomokat  egy  karakteres  táblázatban
  163.       (@KT$(I,J)@N) fogjuk megjeleníteni, ahol  @KB@N jelöli a bomló,  @KK@N a
  164.       keletkezô atomokat.  (A mintaprogramban  ""*"-ot és  ""."-ot
  165.       használunk).  Kezdeti,  bemenô adatként  szükségünk  lesz az
  166.       atomok    kezdeti    számára    (@KN@N),    valamint     bomlási
  167.       valószínûségükre   (@KP@N).    Kimenô   adatként    szerepel   a
  168.       keletkezett,  illetve a  megmaradt atomok  száma (@KU@N  és  @KN@N).
  169.       Megjeleníthetjük  (a  táblázat  mellett)  @KU@N  és  @KN@N numerikus
  170.       értékét, esetleg grafikonon nyomon követhetjük változásukat.
  171.       (Az  egyszerûség kedvéért  a @KK@N  típusú atomok  nem  bomlanak
  172.       tovább.) Lássuk a korábban bemutatott keret kitöltését:
  173.           @KRadioaktív bomlás:
  174.         Be: N,P
  175.         Táblázatfeltöltés (T$(I,J));
  176.         Táblázatmegjelenítés (T$(I,J));
  177.         T=0; U=0;
  178.         Ciklus amig Szükséges
  179.             Q=Véletlenszám;
  180.             (I,J)=Véletlen_helyválasztás;
  181.             Ha T$(I,J)="B" és Q<P akkor T$(I,J)="K";
  182.                         U=U+1;
  183.                         N=N-1;
  184.             Táblázatmegjelenítés (T$(I,J));
  185.             Ki: U,N,T
  186.         Ciklus vége;
  187.           Program vége.@N
  188.           Ezek után a program megírása kedvenc gépünkön és kedvenc
  189.       nyelvünkön nem okozhat komolyabb nehézséget, esetleg a  ""K"
  190.       atomok  további  bomlását  figyelembe  véve  sem.  (Lásd   a
  191.       mellékelt Pascal programot.)
  192.  
  193.       program Radio_bomlas;
  194.       {Lencsés Gábor}
  195.  
  196.       uses crt;
  197.       const xmax = 50;
  198.         ymax = 20;
  199.       var t:array[1..xmax,1..ymax] of char;
  200.           x,y,i,u,n:integer;
  201.           q,p:real;
  202.  
  203.       procedure feltolt;
  204.       begin
  205.           for x:=1 to xmax do begin
  206.               for y:=1 to ymax do begin
  207.                   t[x,y]:='_';
  208.               end;
  209.           end;
  210.           for i:=1 to n do begin
  211.               repeat
  212.                   x:=random(xmax)+1;
  213.                   y:=random(ymax)+1;
  214.               until t[x,y]='_';
  215.               t[x,y]:='∙';
  216.           end;
  217.       end;
  218.  
  219.       procedure megjel;
  220.       begin
  221.         clrscr;
  222.         for y:=1 to ymax do begin
  223.           gotoxy(1,y);
  224.           for x:=1 to xmax do begin
  225.         write(t[x,y]);
  226.           end;
  227.         end;
  228.       end;
  229.  
  230.       procedure adatbe;
  231.        begin
  232.           write('Atomok száma : ');
  233.           readln(n);
  234.           write('Atom bomlási valószínûsége : ');
  235.           readln(p);
  236.        end;
  237.  
  238.  
  239.       procedure bomlas;
  240.       begin
  241.            q:=random;
  242.            x:=random(xmax)+1;
  243.            y:=random(ymax)+1;
  244.            if (t[x,y]='∙') and (q<p) then begin
  245.           t[x,y]:='*';
  246.           n:=n-1;
  247.           u:=u+1;
  248.           gotoxy(x,y);
  249.           writeln('*');
  250.            end;
  251.            gotoxy(65,2);
  252.            writeln('Atom : ',n+u);
  253.            gotoxy(65,3);
  254.            writeln('Eredeti : ',n,' ');
  255.            gotoxy(65,4);
  256.            writeln('Uj : ',u);
  257.       end;
  258.  
  259.       begin
  260.            clrscr;
  261.            adatbe;
  262.            feltolt;
  263.            megjel;
  264.            u:=0;
  265.            repeat
  266.           bomlas;
  267.            until keypressed;
  268.       end.
  269.  
  270.  
  271.       @VGázmolekulák@N
  272.  
  273.           A  másik  jelenség  sem  ismeretlen.  Az  Ehrenfest-féle
  274.       urnamodellrôl  van  szó,  amelynek  számos   interpretációja
  275.       ismert. Van, aki két bolhás kutya képében találkozott  vele,
  276.       a   mostani   középiskolások   inkább   darazsak  formájában
  277.       tanulták, dobókockákkal. A  probléma tehát a  következô: egy
  278.       tartályban   gázmolekulák   találhatók.   Ezt   a   tartályt
  279.       összekapcsoljuk egy másik,  üres tartállyal. Kérdés,  hogyan
  280.       alakul a molekulák száma a két tartályban az idô  múlásával?
  281.       Világos,  hogy  mindegyik  molekula  természeti törvényeknek
  282.       engedelmeskedve,       tehát       determináltan
  283.       (differenciálegyenlettel   leírható    módon)   mozog,    de
  284.       fantasztikusan nagy számuk miatt még numerikusan sem  tudjuk
  285.       megoldani a problémát.  Ezért azzal a  feltételezéssel élünk
  286.       -- ami nézôpontunkból igaz  is --, hogy a  molekulák mozgása
  287.       véletlenszerû, sztochasztikus.
  288.           Ennek megfelelôen modellünk a következô: legyen @KN@N  darab
  289.       molekulánk, melyek helyét a @KH(I)@N tömb mutatja (a @KH(I)@N értéke
  290.       0 vagy 1 aszerint, hogy a kiszemelt molekula a bal vagy jobb
  291.       oldali  tartályban  van.).  A  tartályokban  lévô  molekulák
  292.       számát az @KA@N illetve @KB@N változók tartalmazzák. Bemenô adatként
  293.       megadható @KN@N  és @KA@N  értéke (ebbôl  @KB=N-A@N), kimenô  adatként @KA@N
  294.       illetve @KB@N értékét várjuk. Az algoritmus vázlata:
  295.           @KGázeloszlás:
  296.         Be: N, A;
  297.         B=N-A;
  298.         Tömbfeltöltés (H(I),A);
  299.         T=0;
  300.         Ciklus amíg Szükséges
  301.             I=Véletlen_molekula;
  302.             Ha H(I)=0 akkor H(I)=1;
  303.                     A=A-1;
  304.                     B=B+1;
  305.                 különben H(I)=0;
  306.                     A=A+1;
  307.                     B=B-1;
  308.             Ki: T, A,B;
  309.         Ciklus vége
  310.           Program vége.@N
  311.           Természetesen   a   program   kijelzését  komfortosabbá,
  312.       látványosabbá tehetjük @KA@N és @KB@N értékének folyamatos  grafikus
  313.       megjelenítésével,  vagy  akár   a  tartályok,  s   bennük  a
  314.       molekulák  kirajzolásával,  mint a  mellékelt  Pascal nyelvû
  315.       programban látható.
  316.  
  317.       program gaz_szimulacio;
  318.        {Palotás Gergely}
  319.  
  320.        uses graph,crt;
  321.        var grd,grm,i,f1,x,f2,f3,ii,y,c,a,b:integer;
  322.            sz,n,j:longint;
  323.            szo1,szo2:string;
  324.  
  325.        procedure tajekoztato;
  326.         begin
  327.          clrscr;
  328.          writeln(' A program gázmolekulák áramlását szimulálja !');
  329.          writeln;writeln;
  330.          writeln(' <space> - Start ');
  331.          repeat until keypressed;
  332.         end;
  333.  
  334.        procedure bekeres;
  335.         begin
  336.          clrscr;
  337.          writeln(' Gázmolekulák száma : ');
  338.          repeat
  339.           readln(n);
  340.          until n>0;
  341.          if n>80000 then n:=80000 ;
  342.          clrscr;
  343.          writeln(' Mennyi van az A-ban : ');
  344.          repeat
  345.           readln(sz);
  346.           sz:=abs(sz);
  347.          until sz<40000;
  348.         end;
  349.  
  350.        procedure kezdoabra;
  351.         begin
  352.          rectangle(50,50,350,300);
  353.          line(200,50,200,300);
  354.          rectangle(450,200,700,300);
  355.          rectangle(1,1,710,347);
  356.          outtextxy(400,100,'Kilepes := <SPACE>');
  357.          outtextxy(400,200,'100%');
  358.          outtextxy(400,250,' 50%');
  359.          outtextxy(400,300,'  0%');
  360.          settextstyle(4,0,5);
  361.          outtextxy(100,5,'A');
  362.          outtextxy(250,5,'B');
  363.          outtextxy(450,150,'% az A-ban');
  364.          for i:= 1 to sz do
  365.           begin
  366.            repeat
  367.         x:=random(148)+51;
  368.         y:=random(248)+51;
  369.         c:=getpixel(x,y);
  370.            until c=0;
  371.            putpixel(x,y,1);
  372.           end;
  373.          i:=0;
  374.          for i:= 1 to n-sz do
  375.           begin
  376.            repeat
  377.         x:=random(148)+201;
  378.         y:=random(248)+51;
  379.         c:=getpixel(x,y);
  380.            until c=0;
  381.            putpixel(x,y,1);
  382.           end;
  383.           f1:=1;
  384.           j:=(sz*100) div n;
  385.           putpixel(450+f1,300-j,1);
  386.           f2:=450+f1;f3:=300-j;
  387.           f1:=2;
  388.        end;
  389.  
  390.        procedure szimulacio;
  391.          begin
  392.          for i:= 1 to 20 do
  393.           begin
  394.           repeat
  395.            a:=random(2);
  396.            if a=0 then b:=51
  397.               else b:=201;
  398.            x:=random(149)+b;
  399.            y:=random(248)+51;
  400.            c:=getpixel(x,y);
  401.           until c=1;
  402.           putpixel(x,y,0);
  403.           a:=abs(a-1);
  404.           if a=0 then b:=51
  405.              else b:=201;
  406.           repeat
  407.            x:=random(149)+b;
  408.            y:=random(248)+51;
  409.            c:=getpixel(x,y);
  410.           until c=0;
  411.           putpixel(x,y,1);
  412.           if a=0 then sz:=sz+1
  413.              else sz:=sz-1;
  414.          end;
  415.        end;
  416.  
  417.        procedure ertekeles;
  418.          begin
  419.           j:=(sz * 100) div n;
  420.           line(f2,f3,450+f1,300-j);
  421.           f2:=450+f1;f3:=300-j;
  422.           f1:=f1+1;
  423.          end;
  424.  
  425.       begin
  426.         grd:=0;
  427.         tajekoztato;
  428.         bekeres;
  429.         initgraph(grd,grm,'d:\tp\bgi');
  430.         kezdoabra;
  431.         repeat
  432.          szimulacio;
  433.          ertekeles;
  434.          ii:=ii+1;
  435.         until keypressed or (ii=250);
  436.         outtextxy(400,2,'VÉGE');
  437.         repeat until keypressed;
  438.       end.
  439.  
  440.  
  441.       @VFolytatjuk!@N
  442.  
  443.           A   sorozat   további   részeiben   fizikai,  biológiai,
  444.       statisztikai  modelleket  veszünk  részletesebben szemügyre.
  445.       Minden esetben egy egyszerû, elemi, jól átlátható  modellbôl
  446.       kiindulva,  a  feltételek  számát  növelve  jutunk  el  igen
  447.       összetett,  nagy  teljesítôképességû,  érdekes  eredményeket
  448.       szolgáltató  rendszerekig.   Addig  is   legyen  szabad   az
  449.       érdeklôdô Olvasó figyelmét két alapvetô könyvre felhívni: M.
  450.       Eigen--R.  Winkler:  A  játék  (Gondolat  Könyvkiadó, 1981.)
  451.       illetve Marx Gy.: A természet játékai (Ifjúsági Lapkiadó).
  452.  
  453.       @KBánhegyesi Zoltán@N
  454.